package model

import (
	"time"
)

// WechatConfig 微信配置模型
type WechatConfig struct {
	ID        uint      `gorm:"primarykey" json:"id"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`

	// 关联信息
	TenantID uint   `gorm:"index" json:"tenant_id"` // 所属商户ID
	Name     string `gorm:"size:50" json:"name"`    // 配置名称
	Type     string `gorm:"size:20" json:"type"`    // 类型: mini_program, official_account

	// 基础配置
	AppID          string `gorm:"size:50" json:"app_id"`
	AppSecret      string `gorm:"size:100" json:"app_secret"`
	Token          string `gorm:"size:50" json:"token"`
	EncodingAESKey string `gorm:"size:100" json:"encoding_aes_key"`

	// 支付相关
	MchID           string `gorm:"size:50" json:"mch_id"`
	PayKey          string `gorm:"size:100" json:"pay_key"`
	APIKeyV3        string `gorm:"size:100" json:"api_key_v3"`
	AppCertPath     string `gorm:"size:255" json:"app_cert_path"`
	AppKeyPath      string `gorm:"size:255" json:"app_key_path"`
	ServerCertPath  string `gorm:"size:255" json:"server_cert_path"`
	NotifyURL       string `gorm:"size:255" json:"notify_url"`
	RefundNotifyURL string `gorm:"size:255" json:"refund_notify_url"`
	EnableSandbox   bool   `json:"enable_sandbox"`

	// 公众号特有
	OauthRedirectURL string `gorm:"size:255" json:"oauth_redirect_url"`

	// 状态
	IsDefault bool `gorm:"default:false" json:"is_default"` // 是否为默认配置
	Status    int  `gorm:"default:1" json:"status"`         // 状态：0-禁用，1-启用

	// 备注
	Remark string `gorm:"size:255" json:"remark"`
}

// TableName 指定表名
func (WechatConfig) TableName() string {
	return "sys_wechat_config"
}

// WechatConfigService 微信配置服务接口
type WechatConfigService interface {
	// 基础CRUD
	Create(config *WechatConfig) error
	Update(config *WechatConfig) error
	Delete(id uint) error
	GetByID(id uint) (*WechatConfig, error)

	// 业务方法
	GetByTenantAndType(tenantID uint, configType string) (*WechatConfig, error)
	GetDefault(tenantID uint, configType string) (*WechatConfig, error)
	ListByTenant(tenantID uint) ([]*WechatConfig, error)
	SetDefault(id uint, tenantID uint) error
}
